package com.atguigu;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Max {

	/*
	 * 输入包括多组测试数据。 每组输入第一行是两个正整数N和M（0 < N <= 30000,0 < M <
	 * 5000）,分别代表学生的数目和操作的数目。 学生ID编号从1编到N。
	 * 第二行包含N个整数，代表这N个学生的初始成绩，其中第i个数代表ID为i的学生的成绩
	 * 接下来又M行，每一行有一个字符C（只取‘Q’或‘U’），和两个正整数A,B,当C为'Q'的时候,
	 * 表示这是一条询问操作，他询问ID从A到B（包括A,B）的学生当中，成绩最高的是多少
	 * 当C为‘U’的时候，表示这是一条更新操作，要求把ID为A的学生的成绩更改为B。
	 */
	public static void main(String[] args) throws Exception {
		InputStreamReader inputStreamReader = new InputStreamReader(System.in);
		BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
		String readLine=null;
		while((readLine = bufferedReader.readLine())!=null){
			
		String[] split = readLine.split(" ");
		int N = Integer.parseInt(split[0]);
		int M = Integer.parseInt(split[1]);
		readLine=bufferedReader.readLine();
		split = readLine.split(" ");
		int [] grade=new int[N];
		for (int i = 0; i < N; i++) {
			grade[i]=Integer.parseInt(split[i]);
		}
		for (int i = 0; i < M; i++) {
			readLine = bufferedReader.readLine();
			split = readLine.split(" ");
			char split0=split[0].charAt(0);
			int split1=Integer.parseInt(split[1]);
			int split2=Integer.parseInt(split[2]);
			if('Q'==split0){
				System.out.println(max(grade,split1,split2));
			}else if('U'==split0){
				grade[split1-1]=split2;
			}
		}
		}
		}

	private static int max(int grade[], int begin, int end) {
		if(begin>end){
			int temp=begin;
			begin=end;
			end=temp;
		}
		int max = grade[begin-1];
		for (int i = begin; i < end; i++) {
			if (max < grade[i]) {
				max = grade[i];
			}
		}
		return max;
	}
}
